package com.skh.array;

import java.util.Arrays;

/*
把数组排成最小的数
 */
public class PrintMinNumber {

    /**
     * 题目描述
     * 输入一个正整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。
     * 例如输入数组{3，32，321}，则打印出这三个数字能排成的最小数字为321323。
     */

    /*
     * 解题思路：
     * 先将整型数组转换成String数组，然后将String数组排序，最后将排好序的字符串数组拼接出来。关键就是制定排序规则。
     * 排序规则如下：
     * 若ab > ba 则 a > b，
     * 若ab < ba 则 a < b，
     * 若ab = ba 则 a = b；
     * 解释说明：
     * 比如 "3" < "31"但是 "331" > "313"，所以要将二者拼接起来进行比较
     */

    public static String printMinNumber(int [] numbers) {

        String[] strs = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            strs[i] = String.valueOf(numbers[i]);
        }
        System.out.println(Arrays.toString(strs));

        Arrays.sort(strs, (s1, s2) -> {
            String str1 = s1+s2;
            String str2 = s2+s1;
            return str1.compareTo(str2);
        });

        System.out.println(Arrays.toString(strs));

        StringBuilder sb = new StringBuilder();
        for (String str : strs) {
            sb.append(str);
        }

        return sb.toString();
    }

    public static void main(String[] args) {
        int[] numbers = {31,32,321};
        String result = PrintMinNumber.printMinNumber(numbers);
        System.out.println("result = " + result);
    }
}
